package main

import "fmt"

//考察：数组遍历、map使用
//题目：给定一个整数数组 nums 和一个目标值 target，请你在该数组中找出和为目标值的那两个整数

func twoSum(nums []int, target int) []int {
	// 定义一个map
	numMap := make(map[int]int)

	// 遍历数组
	for i, num := range nums {
		// 计算需要的另一个数
		complement := target - num

		// 检查map中是否存在这个数
		if j, exists := numMap[complement]; exists {
			// 存在则返回两个索引
			return []int{j, i}
		}

		// 不存在则将当前数和索引存入map
		numMap[num] = i
	}
	return []int{}
}

func main() {
	num1 := []int{2, 7, 11, 15}
	val1 := twoSum(num1, 9)
	fmt.Printf("%v（%d+%d=%d）\n", val1, num1[val1[0]], num1[val1[1]], 9) // 输出 [0 1]（2+7=9）

	num2 := []int{3, 2, 4}
	val2 := twoSum(num2, 6)
	fmt.Printf("%v（%d+%d=%d）\n", val2, num2[val2[0]], num2[val2[1]], 6) // 输出 [1 2]（2+4=6）

	num3 := []int{3, 3}
	val3 := twoSum(num3, 6)
	fmt.Printf("%v（%d+%d=%d）\n", val3, num3[val3[0]], num3[val3[1]], 6) // 输出 [0 1]（3+3=6）

}
